﻿/********************************************************************************
* 文件名  : splashscreen.cpp
* 创建人  : weilan
* 创建日期: xxxx.xx.xx
* 描述    : 启动动画
********************************************************************************/

#include "splashscreen.h"
#include <QPainter>
#include <QBrush>
#include <QColor>
#include <QString>

/**
 * @brief 构造函数
 * @param pixmap - 启动动画
 */
SplashScreen::SplashScreen(const QPixmap &pixmap /*= QPixmap()*/)
    :QSplashScreen(pixmap), currentPercent(0)
{
    if(pixmap.isNull())   //若没有启动动画则直接返回
        return;
    w = pixmap.width() * 2 / 3;
    h = 20;
    x = pixmap.width() / 6;
    y = pixmap.height() * 3 / 4;
}

/**
 * @brief 析构函数
 */
SplashScreen::~SplashScreen()
{

}

/**
 * @brief 设置进度
 * @param 当前初始化的进度，范围：0 - 100
 */
void SplashScreen::setStagePercent(int percent)
{
    //为了让当前进度（currentPercent）的变化显得更加平滑，因此采用for循环将currentPercent递增。
    for(; currentPercent < percent; ++currentPercent)
        repaint();     //更新绘图
}

/**
 * @brief 绘图事件
 */
void SplashScreen::paintEvent(QPaintEvent *)
{
    QPainter painter(this);    //画家
    QBrush brush(Qt::white);   //画刷
    QPen pen(Qt::black);
    painter.setBrush(brush);

    //绘制进度条
    painter.drawRoundedRect(x, y, w, h, h/4, h/4);//绘制进度条的外边框（圆角矩形）
    brush.setColor(Qt::darkYellow);
    painter.setBrush(brush);
    painter.drawRoundedRect(x, y, w * currentPercent / 100, h, h/4, h/4);//填充进度条

    //绘制进度文本
    painter.setPen(pen);
    painter.drawText(x + w / 2, y + h - 2, QString::number(currentPercent, 10) + QString("%"));
}

/**
 * @brief 鼠标按下事件。当单击启动动画时，启动动画会被隐藏，该函数用于解决这个问题
 * @param event - 鼠标按下事件
 */
void SplashScreen::mousePressEvent(QMouseEvent *event)
{
    event->ignore();   //忽略该事件。用于解决单击鼠标时，启动动画被隐藏的问题
}
